package router

import (
	"log"
	"net/http"
	"os"
)

type StaticRouter struct {
	*http.ServeMux
}

func NewStaticRouter(path string, handler http.Handler) *StaticRouter {
	router := &StaticRouter{
		ServeMux: http.NewServeMux(),
	}
	router.ServeMux.Handle(path, handler)

	// 设置自定义路由器
	http.Handle(path, router)

	return router
}

func (cm *StaticRouter) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	log.Printf("muxHandle:【%s】", r.URL.Path)

	// 获取请求的路径
	path := r.URL.Path

	// 如果请求的是根目录，使用 indexHandler
	if path == "/" {
		// 这里应该给一个默认的服务启动页面
		// http.Redirect(w, r, "/index", http.StatusMovedPermanently)
	}

	// 检查路径是否是一个目录
	filePath := "./resources/static" + path
	if stat, err := os.Stat(filePath); err == nil && stat.IsDir() {
		if _, err = os.Stat(filePath + "index.html"); os.IsNotExist(err) {
			// 如果是目录并且不存在index.html，返回 403 Forbidden
			http.Error(w, "403 Forbidden.文件目录不允许访问", http.StatusForbidden)
			return
		}
	}

	// 处理其他路径
	cm.ServeMux.ServeHTTP(w, r)
}
